home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / term / extras / source / gtlayout-source.lha / LTP_PlaceGroups.c < prev    next >
C/C++ Source or Header  |  1995-05-27  |  2KB  |  108 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. VOID __regargs
  10. LTP_PlaceGroups(LayoutHandle *handle,ObjectNode *group,LONG left,LONG top)
  11. {
  12.     if(!handle -> Failed)
  13.     {
  14.         ObjectNode    *node;
  15.         LONG         plusLeft,
  16.                  plusTop,
  17.                  lastSpace;
  18.  
  19.         if(group -> Label || group -> Special . Group . Frame)
  20.         {
  21.             plusLeft = 4 + handle -> GlyphWidth + handle -> InterWidth + group -> Special . Group . ExtraLeft;
  22.  
  23.             if(group -> Label)
  24.                 plusTop = handle -> RPort . TxHeight + handle -> InterHeight + group -> Special . Group . ExtraTop;
  25.             else
  26.                 plusTop = 2 + handle -> InterHeight + group -> Special . Group . ExtraTop;
  27.         }
  28.         else
  29.         {
  30.             plusLeft    = group -> Special . Group . ExtraLeft;
  31.             plusTop     = group -> Special . Group . ExtraTop;
  32.         }
  33.  
  34.         if(group -> ExtraSpace)
  35.         {
  36.             if(group -> Special . Group . ParentGroup -> Special . Group . Horizontal)
  37.                 left += handle -> InterWidth;
  38.             else
  39.                 top += handle -> InterHeight;
  40.         }
  41.  
  42.         group -> Left    = left;
  43.         group -> Top    = top;
  44.  
  45.         left    += plusLeft;
  46.         top    += plusTop;
  47.  
  48.         if(group -> Special . Group . Horizontal)
  49.         {
  50.             lastSpace = left;
  51.  
  52.             SCANGROUP(group,node)
  53.             {
  54.                 if(LIKE_STRING_KIND(node) && node -> Special . String . LinkID != -1)
  55.                     handle -> Count++;
  56.                 else
  57.                 {
  58.                     if(node -> Type == GROUP_KIND)
  59.                         LTP_PlaceGroups(handle,node,lastSpace,top);
  60.                     else
  61.                     {
  62.                         node -> Left    += left;
  63.                         node -> Top    += top;
  64.  
  65.                         handle -> Count++;
  66.                     }
  67.  
  68.                     if(!group -> Special . Group . Paging)
  69.                     {
  70.                         lastSpace = node -> Left + node -> Width + handle -> InterWidth;
  71.  
  72.                         if(node -> Type == MX_KIND)
  73.                         {
  74.                             if((node -> LabelPlace == PLACETEXT_RIGHT) || (node -> LabelPlace == PLACETEXT_LEFT))
  75.                                 lastSpace += INTERWIDTH + node -> Special . Radio . LabelWidth;
  76.                         }
  77.                     }
  78.                 }
  79.             }
  80.         }
  81.         else
  82.         {
  83.             lastSpace = top;
  84.  
  85.             SCANGROUP(group,node)
  86.             {
  87.                 if(LIKE_STRING_KIND(node) && node -> Special . String . LinkID != -1)
  88.                     handle -> Count++;
  89.                 else
  90.                 {
  91.                     if(node -> Type == GROUP_KIND)
  92.                         LTP_PlaceGroups(handle,node,left,lastSpace);
  93.                     else
  94.                     {
  95.                         node -> Left    += left;
  96.                         node -> Top    += top;
  97.  
  98.                         handle -> Count++;
  99.                     }
  100.  
  101.                     if(!group -> Special . Group . Paging)
  102.                         lastSpace = node -> Top + node -> Height + handle -> InterHeight;
  103.                 }
  104.             }
  105.         }
  106.     }
  107. }
  108.